package hk.ust.cse.comp3111.studentSchedule;




import java.util.ArrayList;
import java.util.Calendar;
import java.util.TimeZone;


import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.content.ContentUris;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.net.Uri;
import android.provider.CalendarContract;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TimePicker;

public class MainActivity extends Activity {
	
	
	Button insertButton;
	Button insertButton2;
	EditText title;
	EditText description;
	DatePicker fromDate, toDate;
	TimePicker fromTime, toTime;
	TextView textssssss;
	long calendarID;
	long eventID;
	
	private DrawerLayout mDrawerLayout;
	private ListView mDrawerList;
	private ActionBarDrawerToggle mDrawerToggle;

	// nav drawer title
	private CharSequence mDrawerTitle;

	// used to store app title
	private CharSequence mTitle;

	// slide menu items
	private String[] navMenuTitles;
	private TypedArray navMenuIcons;

	private ArrayList<NavDrawerItem> navDrawerItems;
	private NavDrawerListAdapter adapter;
	
	private int location=0;
	private String temp_text=new String();
	
	
	
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*insertButton = (Button)this.findViewById(R.id.buttonInsertEvent);
        insertButton.setOnClickListener(this);
        insertButton2 = (Button)this.findViewById(R.id.buttonInsertEvent2);
        insertButton2.setOnClickListener(this);
        textssssss = (TextView)this.findViewById(R.id.text1);
        
        
        title=(EditText)this.findViewById(R.id.titleInput);
        description=(EditText)this.findViewById(R.id.descriptionInput);
        fromDate=(DatePicker)this.findViewById(R.id.fromDate);
        toDate=(DatePicker)this.findViewById(R.id.toDate);;
        fromTime=(TimePicker)this.findViewById(R.id.fromTime);;
        toTime=(TimePicker)this.findViewById(R.id.toTime);;
        
        */
        
        mTitle = mDrawerTitle = getTitle();

		// load slide menu items
		navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

		// nav drawer icons from resources
		navMenuIcons = getResources()
				.obtainTypedArray(R.array.nav_drawer_icons);

		mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
		mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

		navDrawerItems = new ArrayList<NavDrawerItem>();

		// adding nav drawer items to array
		// Calendar View
		navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
		// Import by course Code
		navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
		// Add events
		navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
		// View By course
		navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));
		// Group Meeting
		navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
		// Add events example
		navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));
		// test for DB
		navDrawerItems.add(new NavDrawerItem(navMenuTitles[6], navMenuIcons.getResourceId(5, -1)));
		

		// Recycle the typed array
		navMenuIcons.recycle();

		mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

		// setting the nav drawer list adapter
		adapter = new NavDrawerListAdapter(getApplicationContext(),
				navDrawerItems);
		mDrawerList.setAdapter(adapter);

		// enabling action bar app icon and behaving it as toggle button
		getActionBar().setDisplayHomeAsUpEnabled(true);
		getActionBar().setHomeButtonEnabled(true);

		mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
				R.drawable.ic_drawer, //nav menu toggle icon
				R.string.app_name, // nav drawer open - description for accessibility
				R.string.app_name // nav drawer close - description for accessibility
		) {
			public void onDrawerClosed(View view) {
				getActionBar().setTitle(mTitle);
				// calling onPrepareOptionsMenu() to show action bar icons
				invalidateOptionsMenu();
			}

			public void onDrawerOpened(View drawerView) {
				getActionBar().setTitle(mDrawerTitle);
				// calling onPrepareOptionsMenu() to hide action bar icons
				invalidateOptionsMenu();
			}
		};
		mDrawerLayout.setDrawerListener(mDrawerToggle);

		if (savedInstanceState == null) {
			// on first time display view for first nav item
			displayView(0);
		}
        
    }
    
    /*
    public void onClick(View v) {
    	
    	switch (v.getId()) {
        case R.id.buttonInsertEvent:
        	addEvent();
            break;
        case R.id.buttonInsertEvent2:
        	textssssss.setText("The event is "+title.getText().toString()+" with description "+ description.getText().toString() +" from " + getTime(fromDate,fromTime) + " to " + getTime(toDate,toTime));
        	break;
        }   
    	

    	}
    
    */
    
    


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    
    
    private void addEvent() {
    	calendarID = getCalendarID();	
    	ContentValues eventValues = new ContentValues ();
    	// provide the required fields for creating an event to
    	// ContentValues instance and insert event using
    	// ContentResolver
    	eventValues.put(CalendarContract.Events.CALENDAR_ID,calendarID);
    	eventValues.put (CalendarContract.Events.TITLE,title.getText().toString());
    	eventValues.put (CalendarContract.Events.DESCRIPTION,description.getText().toString());
    	eventValues.put(CalendarContract.Events.DTSTART,getTime(fromDate,fromTime));
    	eventValues.put(CalendarContract.Events.DTEND,getTime(toDate,toTime));
    	eventValues.put(CalendarContract.Events.EVENT_TIMEZONE,TimeZone.getDefault().toString());
    	Uri eventUri = this.getContentResolver().insert(CalendarContract.Events.CONTENT_URI, eventValues);
    	eventID = ContentUris.parseId(eventUri);
    	textssssss.setText("event id "+ eventID +" inserted");
    }
 // we use this method in order to get the ID of the calendar because
 // calendar ID is a required field in creating an event
    
    public long getCalendarID() {
    	Cursor cur = null;
    	try {
    	// provide CalendarContract.Calendars.CONTENT_URI to
    	// ContentResolver to query calendars
    		cur = this.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI,null,null,null, null);
    		if (cur.moveToFirst()) {
    			return cur.getLong(cur.getColumnIndex(CalendarContract.Calendars._ID));
    		}
    	} catch (Exception e) {
    		e.printStackTrace();
    		} finally {
		    	if (cur != null) {
		    	cur.close();
		    	}
    		}
    	return -1L;
    	}
    	
    
    
    long getTime(DatePicker date, TimePicker time){
    	Calendar calendar = Calendar.getInstance();
    	calendar.set(date.getYear(), date.getMonth(), date.getDayOfMonth(), 
    			time.getCurrentHour(), time.getCurrentMinute(), 0);
    	long startTime = calendar.getTimeInMillis();
    	return startTime;
    }
    
    
	/**
	 * Slide menu item click listener
	 * */
	private class SlideMenuClickListener implements
			ListView.OnItemClickListener {
		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			// display view for selected nav drawer item
			displayView(position);
		}
	}



	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// toggle nav drawer on selecting action bar app icon/title
		if (mDrawerToggle.onOptionsItemSelected(item)) {
			return true;
		}
		// Handle action bar actions click
		switch (item.getItemId()) {
		case R.id.action_settings:
			return true;
		default:
			return super.onOptionsItemSelected(item);
		}
	}

	/* *
	 * Called when invalidateOptionsMenu() is triggered
	 */
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		// if nav drawer is opened, hide the action items
		boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
		menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
		return super.onPrepareOptionsMenu(menu);
	}

	/**
	 * Diplaying fragment view for selected nav drawer list item
	 * */
	private void displayView(int position) {
		// update the main content by replacing fragments
		Fragment fragment = null;
		switch (position) {
		case 0:
			fragment = new ViewCalendar();
			break;
		case 1:
			fragment = new ImportByCourse();
			break;
		case 2:
			fragment = new AddEvent();
			//Intent photoAct = new Intent(getApplicationContext(), photoAct.class);
			//startActivity(photoAct);
			break;
		case 3:
			fragment = new ViewCourse();
			break;
		case 4:
			fragment = new GroupMeeting();
			break;
		case 5:
			fragment = new AddExample();
			break;
		case 6:
			fragment = new dbExample();
			break;

		default:
			break;
		}

		if (fragment != null) {
			FragmentManager fragmentManager = getFragmentManager();
			fragmentManager.beginTransaction()
					.replace(R.id.frame_container, fragment).commit();

			// update selected item and title, then close the drawer
			mDrawerList.setItemChecked(position, true);
			mDrawerList.setSelection(position);
			setTitle(navMenuTitles[position]);
			mDrawerLayout.closeDrawer(mDrawerList);
		} else {
			// error in creating fragment
			Log.e("MainActivity", "Error in creating fragment");
		}
	}

	@Override
	public void setTitle(CharSequence title) {
		mTitle = title;
		getActionBar().setTitle(mTitle);
	}

	/**
	 * When using the ActionBarDrawerToggle, you must call it during
	 * onPostCreate() and onConfigurationChanged()...
	 */

	@Override
	protected void onPostCreate(Bundle savedInstanceState) {
		super.onPostCreate(savedInstanceState);
		// Sync the toggle state after onRestoreInstanceState has occurred.
		mDrawerToggle.syncState();
	}

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		// Pass any configuration change to the drawer toggls
		mDrawerToggle.onConfigurationChanged(newConfig);
	}    
    
    
    
    
    
}
